<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>深拷贝</title>
</head>

<body>
  <script>
    var obj = {
      id: 1,
      uname: 'yq',
      hobby: ['抽烟', '喝酒', '烫头'],
      msg: {
        age: 18,
      }
    }
    var o = {};

    // 封装函数
    function deepCopy(newObj, oldObj) {
      for (var k in oldObj) {
        // 判断我们的属性值数学与那种数据类型
        // 获取属性值
        var item = oldObj[k]
        // 必须先判断是否为数组 因为数组也是Object 
        if (item instanceof Array) {
          newObj[k] = [];
          deepCopy(o[k], item)
        } else if (item instanceof Object) {  // 判断这个值是否为对象
          newObj[k] = {};
          deepCopy(o[k], item);
        } else { //属于简单数据类型 直接赋值
          newObj[k] = item;
        }
      }
    }
    deepCopy(o, obj)
    o.msg.sex = '男';
    console.log(o); // msg: { age: 18, sex: "男" }
    console.log(obj); // msg: {age: 18}
  </script>
</body>

</html>